﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using ServicioRFIDMovil.Entidad;


namespace ServicioRFIDMovil.Herramientas
{
    public class Seguridad
    {
        // RETORNA EL MD5HASH DE UNA ENTRADA INPUT
        static string GetMd5Hash(MD5 md5Hash, string input)
        {
            try
            {
                // CONVIERTE UNA CADENA DE ENTRADA EN UN ARREGLO DE BYTES
                byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));

                // CREA UN COLECTOR DE CADENAS PARA ALMACENAR LOS BYTES
                // Y CREA UNA CADENA
                StringBuilder sBuilder = new StringBuilder();

                // RECORRE CADA BYTE DE LA CADENA HASH
                // Y DA FORMATO A CADA UNO COMO CADENA HEXADECIMAL
                for (int i = 0; i < data.Length; i++)
                {
                    sBuilder.Append(data[i].ToString("x2"));
                }

                // RETORNA UNA CADENA HEXADECIMAL
                return sBuilder.ToString();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        // COMPARA UN INPUT DE ENTRADA CON UN HASH INICIAL
        static bool VerifyMd5Hash(MD5 md5Hash, string input, string hash)
        {
            try
            {
                // HASH DE LA ENTRADA
                string hashOfInput = GetMd5Hash(md5Hash, input);

                // CREA LA COMPARACIÓN ENTRE DOS STRING
                StringComparer comparer = StringComparer.OrdinalIgnoreCase;

                if (0 == comparer.Compare(hashOfInput, hash))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        // VALIDA UN USUARIO
        public Usuario Existe(Usuario usuario)
        {
            try
            {
                string passhash = "";

                using (MD5 md5Hash = MD5.Create())
                {
                    passhash = GetMd5Hash(md5Hash, usuario.passUser);
                }

                Usuario usuarioRetorno = new Usuario();
                usuarioRetorno = usuario; 
                usuarioRetorno.passUser = passhash;
                //return UsuarioDAL.Instancia.Existe(username, passhash);
                return usuarioRetorno;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}
